import numpy as np

# 创建测试数据（包含异常值以便演示）
temps = np.array([
    [24.1, 18.4, 29.8, 14.3, 22.7, 31.4, 16.7],
    [19.8, 27.6, 33.1, 20.4, 17.8, 25.3, 28.7],
    [22.3, 16.7, np.nan, 30.1, 24.5, 19.8, 21.3],
    [31.2, 26.7, 18.4, 22.3, 29.8, 17.6, 25.1],
    [20.4, 23.7, 19.8, 30.1, np.inf, 22.3, 28.7],
    [27.6, np.inf, 24.5, 19.8, 23.4, 31.2, 26.7],
    [-5.0, 22.3, 30.1, 25.6, 19.8, 24.5, 36.0]  # 包含明显异常值
])

print("NaN 位置：\n", np.isnan(temps))
print("Inf 位置：\n", np.isinf(temps))

# 创建测试数据
test_arr = np.array([[1, np.nan, 3], [np.inf, 5, -np.inf]])
print("NaN 检测:\n", np.isnan(test_arr))
print("Inf 检测:\n", np.isinf(test_arr))

for i in range(temps.shape[0]):
    row = temps[i]
    valid = row[~np.isnan(row) & ~np.isinf(row)]  # 提取有效值
    mean_val = np.mean(valid)  # 计算平均值
    max_val = np.max(valid)    # 计算最大值
    row[np.isnan(row)] = mean_val  # 替换 NaN
    row[np.isinf(row)] = max_val   # 替换 Inf
print("清洗后数据：\n", temps)

# 创建测试数据
test_temps = np.array([[np.nan, 2, 3], [np.inf, 5, 6]])
print("原始数据:\n", test_temps)

# 手动替换
for i in range(test_temps.shape[0]):
    row = test_temps[i]
    valid = row[~np.isnan(row) & ~np.isinf(row)]
    mean_val = np.mean(valid)
    max_val = np.max(valid)
    row[np.isnan(row)] = mean_val
    row[np.isinf(row)] = max_val
print("替换后数据:\n", test_temps)

# 假设原始数据为 temps_original，清洗后数据为 temps_cleaned
# 这里我们直接比较清洗前后的 temps（假设 temps 还未被修改）
temps_original = temps.copy()  # 保存原始数据

# 执行清洗操作（同上）
for i in range(temps.shape[0]):
    row = temps[i]
    valid = row[~np.isnan(row) & ~np.isinf(row)]
    mean_val = np.mean(valid)
    max_val = np.max(valid)
    row[np.isnan(row)] = mean_val
    row[np.isinf(row)] = max_val

# 比较统计特征
print("原始数据统计:")
print("均值:", np.mean(temps_original, axis=1))
print("标准差:", np.std(temps_original, axis=1))
print("最大值:", np.max(temps_original, axis=1))

print("\n清洗后数据统计:")
print("均值:", np.mean(temps, axis=1))
print("标准差:", np.std(temps, axis=1))
print("最大值:", np.max(temps, axis=1))
